﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess.Client;
using System.Configuration;
using Entidades.Solicitud;
using System.Data;

namespace Persistencia.Obra
{
    public class PerAfectado : Persistencia.General.IPersistencia
    {
        #region Miembros de IPersistencia

        public void Insertar(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public void Actualizar(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public void Eliminar(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public Entidades.General.IEntidad Obtener(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public List<Entidades.General.IEntidad> ObtenerTodos(Entidades.General.IEntidad entidad)
        {
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            OracleDataReader lector = null;
            EntSolicitudAfectado ent = null;
            List<Entidades.General.IEntidad> lista = new List<Entidades.General.IEntidad>();

            try
            {
                comando = new OracleCommand("PKG_SOLICITUD_AFECTADO.getAfectadosPorObra", conexion);
                comando.CommandType = System.Data.CommandType.StoredProcedure;

                conexion.Open();

                #region Parametros
                OracleParameter parametro1 = new OracleParameter();
                parametro1.OracleDbType = OracleDbType.Varchar2;
                parametro1.Value = ((Entidades.Solicitud.EntSolicitudTrabajosRealizar)entidad).CveTrabajoRealizar;
                parametro1.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro1);

                OracleParameter cursor = new OracleParameter();
                cursor.OracleDbType = OracleDbType.RefCursor;
                cursor.Direction = ParameterDirection.Output;
                comando.Parameters.Add(cursor);
                #endregion
                lector = comando.ExecuteReader(CommandBehavior.CloseConnection);

                while (lector.Read())
                {
                    ent = new EntSolicitudAfectado();
                    ent.CveSolicitudAfectado = int.Parse(lector["CVE_SOLICITUD_AFECTADO"] == DBNull.Value ? "0" : lector["CVE_SOLICITUD_AFECTADO"].ToString());
                    ent.AreaAfectada = lector["AREA_AFECTADA"].ToString();
                    ent.CveEstatus = int.Parse(lector["ESTATUS_AFECTADO"] == DBNull.Value ? "0" : lector["ESTATUS_AFECTADO"].ToString());
                    ent.CvePredio = int.Parse(lector["CVE_PREDIO"] == DBNull.Value ? "0" : lector["CVE_PREDIO"].ToString());
                    ent.CveTrabajoRealizar = int.Parse(lector["CVE_TRABAJO_REALIZAR"] == DBNull.Value ? "0" : lector["CVE_TRABAJO_REALIZAR"].ToString());

                    ent.CveUsuario = int.Parse(lector["CVE_USUARIO"].ToString());
                    ent.FechaComprometidaCompromiso =  lector["FECHA_COMPROMETIDA_COMPROMISO"].ToString();
                    ent.FechaCumplimientoCompromiso =  lector["FECHA_CUMPLIMIENTO_COMPROMISO"] .ToString();
                    ent.FechaEnvioPermisoPaso =  lector["FECHA_ENVIO_PERMISO_PASO"].ToString();
                    ent.FechaObtencionPerPaso =  lector["FECHA_OBTENCION_PER_PASO"].ToString();
                    ent.FechaPagoDie =  lector["FECHA_PAGO_DIE"].ToString();
                    ent.FechaRegistro =  lector["FECHA_REGISTRO"].ToString();
                    ent.KilometroFinal = lector["KILOMETRO_FINAL"].ToString();
                    ent.KilometroInicial = lector["KILOMETRO_INICIAL"].ToString();
                    ent.LongitudAfectada = lector["LONGUITD_AFECTADA"].ToString();
                    ent.MontoAfectacionAprobado = lector["MONTO_POR_AFECTACION_APROBADO"].ToString();
                    ent.NoExpendiente = lector["NO_EXPEDIENTE"].ToString();
                    ent.Observaciones = lector["OBSERVACIONES"].ToString();
                    ent.PP_ErogacionVerbal = lector["PP_EROGACION_VERBAL"].ToString();
                    
                    ent.Predio = new Entidades.Catalogo.EntPredio();
                    ent.Predio.CvePredio = int.Parse(lector["CVE_PREDIO"] == DBNull.Value ? "0" : lector["CVE_PREDIO"].ToString());
                    ent.Predio.Acreditado = lector["ACREDITADO_NO"].ToString();
                    ent.Predio.CveAfectado = int.Parse(lector["CVE_AFECTADO"] == DBNull.Value ? "0" : lector["CVE_AFECTADO"].ToString());
                    ent.Predio.Afectado = new Entidades.Catalogo.EntPersonas();

                    ent.Predio.Afectado.Nombre = lector["NOMBRE"].ToString();
                    ent.Predio.Afectado.Paterno = lector["APELLIDO_P"].ToString();
                    ent.Predio.Afectado.Materno = lector["APELLIDO_M"].ToString();
                    ent.Predio.Afectado.Sexo = lector["SEXO"].ToString();
                    ent.Predio.Afectado.RFC = lector["RFC"].ToString();
                    ent.Predio.Afectado.ClaveElector = lector["CLAVE_ELECTOR"].ToString();

                    ent.Predio.CveLocalidad = int.Parse(lector["CVE_LOCALIDAD"] == DBNull.Value ? "0" : lector["CVE_LOCALIDAD"].ToString());
                    ent.Predio.CveMunicipio = int.Parse(lector["CVE_MUNICIPIO"] == DBNull.Value ? "0" : lector["CVE_MUNICIPIO"].ToString());
                    // no muy seguro que este sea el campo
                    ent.Predio.CveTipoAcreditacion =  lector["ACREDITADO"] .ToString();
                    ent.Predio.Denominado = lector["PREDIO_DENOMINADO"].ToString();
                    ent.Predio.Este = lector["ESTE"].ToString();
                    ent.Predio.NoEscritura = lector["NO_ESCRITURA"].ToString();
                    ent.Predio.NoNotaria = lector["NO_NOTARIA"].ToString();
                    ent.Predio.NoNotario = lector["NO_NOTARIO"].ToString();
                    ent.Predio.Norte = lector["NORTE"].ToString();
                    ent.Predio.Oeste = lector["OESTE"].ToString();
                    ent.Predio.Referencia = lector["PREDIO_REFERENCIA"].ToString();
                    ent.Predio.Superficie = lector["PREDIO_SUPERFICIE"].ToString();
                    ent.Predio.Sur = lector["SUR"].ToString();
                    
                    lista.Add(ent);
                }
            }
            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "PKG_SOLICITUD_AFECTADO.getAfectadosPorObra";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "PKG_SOLICITUD_AFECTADO.getAfectadosPorObra";
                throw excepcion;
            }
            finally
            {
                if (conexion.State == ConnectionState.Open)
                    conexion.Close();

                comando = null;

                if (lector != null)
                    lector.Close();
            }
            return lista;
        }

        public List<Entidades.General.IEntidad> ObtenerTodos()
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}
